iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Software Development

一起看無間道學EdgeDB系列 第 15

[Day15] - 次幕:我想跟他換

  • 分享至 

  • xImage
  •  

Full schema preview

本日所有schema搶先看

劇情提要

葉校長與黃sir準備於警校新生中,挑選適合的新人臥底至黑社會。永仁天資優異,觀察入微,為臥底的不二人選。兩人指示永仁假裝鬧事並趁機將其趕出警校,而建明此時剛好入學,看著永仁背影喃喃自語道:「我想跟他換」。或許建明從一開始就真的想做個好人?

scene02

此劇照引用自IMDb-無間道

EdgeQL query

insert陳永仁及其少年時期演員余文樂

練習使用nested insert來同時insert陳永仁及演員余文樂。

insert PoliceSpy {
      name:="陳永仁",
      nickname:= "仁哥",
      gangster_boss:= hon,
      actors := (insert Actor {
                  name:= "余文樂",
                  eng_name:= "Shawn",
                  nickname:= "六叔",
      }),
};

insert黃志誠及其演員黃秋生

練習使用nested insert來同時insert黃志誠及演員黃秋生。

insert Police {
      name:= "黃志誠",
      nickname:= "黃sir",
      police_rank:= PoliceRank.SIP, 
      actors := (insert Actor {
                  name:= "黃秋生",
                  eng_name:= "Anthony",
                  nickname:= "大飛哥",
      }),
};

建立alias及編寫測試aliasfunction

建立一個chen(陳永仁)及wong(黃志誠)的alias

alias chen:= assert_exists(
                assert_single(
                    (select GangsterSpy filter .name = "陳永仁")
                )
);

alias wong:= assert_exists(
                 assert_single(
                     (select Police filter .name = "黃志誠")
                 )
);

新增test_scene02_alias()並更新test_alias()

function test_alias() -> bool
using (all({
        test_scene01_alias(),
        test_scene02_alias(),
    })
);

function test_scene02_alias() -> bool
using (all({
        (exists chen),          
        (exists wong), 
    })
);

執行1st migration

did you create alias 'default::chen'? [y,n,l,c,b,s,q,?]
> y
did you create alias 'default::wong'? [y,n,l,c,b,s,q,?]
> y
did you create function 'default::test_scene02_alias'? [y,n,l,c,b,s,q,?]
> y
did you alter function 'default::test_alias'? [y,n,l,c,b,s,q,?]
> y

測試test_alias()

# 1st migration needs to be applied before running this query
select test_alias();

建立ChenLauContact

由於建明與永仁於警校門口就已見過彼此,這勾起我們的好奇心,想知道兩人究竟於劇中見面或聯絡了幾次?於是我們選擇建立一個ChenLauContactobject type來記錄。
ChenLauContact extending Event而來:

  • 新增一個how property來描述聯絡方式。
  • overloadedwho這個multi link,給予預設值{chen, lau}
type ChenLauContact extending Event {
    how: str;
    overloaded who: Character {default:= {chen, lau}}
}

執行end migration here

did you create object type 'default::ChenLauContact'? [y,n,l,c,b,s,q,?]
> y

insert ChenLauContact

# end migration needs to be applied before running this query
insert ChenLauContact {
      how:= "面對面",
      detail:= "永仁假裝鬧事被趕出警校時,與建明在門口有一面之緣。",
      `when`:= year_1992,
      where:= (insert Landmark {name:= "警校"}),
};

insert此場景的Scene

insert Scene {
      title:= "我想跟他換",
      detail:= "葉校長與黃sir準備於警校新生中,挑選適合的新人臥底至黑社會。" ++
               "永仁天資優異,觀察入微,為臥底的不二人選。兩人指示永仁假裝鬧" ++
               "事並趁機將其趕出警校,而建明此時剛好入學,看著永仁背影喃喃自" ++
               "語道:「我想跟他換」。或許建明從一開始就真的想做個好人?",
      remarks:= "1.假設黃Sir於1992年官階為`SIP`。",     
      who:= {wong, chen, lau},
      `when`:= year_1992,
      where:= (select Landmark filter .name="警校"),    
};

由於Landmark objectname property是來自Place abstract object,為delegated constraint exclusive,代表所有Landmark object中的name property應該為獨一無二的。

無間吹水

葉校長於1991年,年約42歲,且已擔任警校校長十年(由無間道Ⅱ得知)。參考維基百科所述,現在香港警察學院校長的官階約為助理處長。即使是前身的警察訓練學校,校長官階也應最少為警司級別以上。這麼一來,就代表葉校長32歲時,已經身居高位,升職的速度堪比坐火箭一般。相比之下,劇中黃志誠於2002年時,年約46歲,也僅擔任警司。

參考資料

無間EdgeDB次幕:我想跟他換


上一篇
[Day14] - 首幕:韓琛初現
下一篇
[Day16] - 三幕:黑白顛倒
系列文
一起看無間道學EdgeDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言